package ru.xeden.web.request;

import ru.xeden.core.query.QueryParam;


public class UrlParamBuilder<T extends QueryParam>
{
    final private T queryParam;
    private String cachePage;
    
    public UrlParamBuilder(final T queryParam)
    {
        this.queryParam = queryParam;
    }
    
    public T getQueryParam()
    {
        return queryParam;
    }

    public String getPage()
    {
        if (cachePage != null)
        {
            return cachePage;
        }

        if (getQueryParam() == null)
        {
            cachePage = "";
            return cachePage;
        }

        StringBuilder sb = new StringBuilder();
        add("page", getQueryParam().getPage(), sb);
        add("limit", getQueryParam().getPageSize(), sb);
        
        if (queryParam == null)
        {
            cachePage = sb.toString();
            return cachePage;
        }

        add("ord", queryParam.getOrd(), sb);
        add("asc", queryParam.getAsc(), sb);

        cachePage = sb.toString();
        return cachePage;
    }
    
    /**
     * Вспомогательный метод для построения параметров URL
     * @param key
     * @param value
     * @param sb
     */
    static protected void add(String key, Object value, StringBuilder sb)
    {
        if (value != null)
        {
            String v = value.toString().trim();
            if (v.length() > 0)
            {
                if (sb.length() > 0)
                {
                    sb.append("&");
                }
                sb.append(key).append("=").append(value.toString());
            }
        }
    }
}
